package app

import (
	"uni-core/globals"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/theme"
	"gitee.com/MM-Q/fastlog"
	"github.com/jmoiron/sqlx"
)

// appInitUi 初始化应用程序的用户界面
func appInitUi(db *sqlx.DB, log *fastlog.FastLog) fyne.Window {
	// 创建一个新的应用程序实例
	app := app.NewWithID("com.uni-core.app")

	// 获取应用程序的元数据
	appName := app.Metadata().Name
	if appName == "" {
		appName = globals.DefProjectName
	}

	// 创建一个新的窗口
	window := app.NewWindow(appName)

	// 设置窗口的图标
	window.SetIcon(theme.ComputerIcon())

	// 设置窗口的初始大小
	window.Resize(fyne.NewSize(900, 500))

	// 设置居中显示
	window.CenterOnScreen()

	// 创建一个多标签页式的容器
	tabs := createTabs(db, log, window, app)

	// 设置标签页在左侧
	tabs.SetTabLocation(container.TabLocationLeading)

	// 将多标签页式的容器添加到窗口中
	window.SetContent(tabs)

	// 设置窗口图标
	window.SetIcon(fyne.NewStaticResource("icon", globals.UniCoreIcon))

	return window
}

func createTabs(db *sqlx.DB, log *fastlog.FastLog, w fyne.Window, a fyne.App) *container.AppTabs {
	// 创建密码管理标签页
	pswdTab := container.NewTabItem("密码管理", pswdInitUi(db, log, w, a))

	// 设置密码管理标签页的图标
	pswdTab.Icon = theme.GridIcon()

	// 创建数据管理标签页
	dataManageTab := dataManageTabUI(w, db, log)

	// 设置数据管理标签页的图标
	dataManageTab.Icon = theme.StorageIcon()

	// 创建项目信息标签页
	projectInfoTab := container.NewTabItem("项目信息", createProjectInfoTab(w, a))

	// 设置项目信息标签页的图标
	projectInfoTab.Icon = theme.InfoIcon()

	// 创建多标签页式的容器
	tabs := container.NewAppTabs(pswdTab, dataManageTab, projectInfoTab)

	// 设置密码管理为默认选中
	tabs.SelectIndex(0)

	return tabs
}
